package org.lightpersist.dao;

import java.io.Serializable;
import java.util.List;

public abstract class AbstractDao<T,ID extends Serializable> implements Dao<T,ID> {
	
	protected abstract Class<T> getEntityClass();
	
	public void delete(T entity) {
		getDaoTemplate().delete(entity);
	}

	public void deleteById(ID id) {
		getDaoTemplate().deleteById(getEntityClass(), id);
	}

	public List<T> findAll() {
		return getDaoTemplate().findAll(getEntityClass());
	}

	public T get(ID id) {
		return getDaoTemplate().get(getEntityClass(), id);
	}

	public Page<T> getPage(int pageIndex, int maxResults) {
		return getDaoTemplate().getPage(getEntityClass(), pageIndex, maxResults);
	}

	public Page<T> getPage(int pageIndex, int maxResults, String orderBy,
			boolean desc) {
		return getDaoTemplate().getPage(getEntityClass(), pageIndex, maxResults, orderBy, desc);
	}

	public void save(T entity) {
		getDaoTemplate().save(entity);
	}

	public void saveOrUpdate(T entity) {
		getDaoTemplate().saveOrUpdate(entity);
	}

	public void update(T entity) {
		getDaoTemplate().update(entity);
	}
	
	public List<T> findIn(ID... ids) {
		return getDaoTemplate().findIn(getEntityClass(), ids);
	};
	
	public List<T> findIn(String commaDelimId) {
		return getDaoTemplate().findIn(getEntityClass(), commaDelimId);
	};
	
	protected abstract DaoTemplate getDaoTemplate() ;
	
}
